﻿using System;
using System.Windows;
using System.Windows.Media;
using System.Windows.Input;
using System.Windows.Controls;

namespace Berico.SnagL.UI
{
    /// <summary>
    /// Defines the contract for an edge line
    /// </summary>
    public interface IEdgeLine
    {
        /// <summary>
        /// Indicates the mouse enters the line
        /// </summary>
        event EventHandler<MouseEventArgs> LineMouseEnter;

        /// <summary>
        /// Indicates the mouse leaves the line
        /// </summary>
        event EventHandler<MouseEventArgs> LineMouseLeave;

        /// <summary>
        /// Indicates the right mouse button is down on the line
        /// </summary>
        event EventHandler<MouseEventArgs> LineRightMouseDown;

        /// <summary>
        /// Indicates the right mouse button is up on the line
        /// </summary>
        event EventHandler<MouseEventArgs> LineRightMouseUp;
        
        /// <summary>
        /// Gets or sets the lines color
        /// </summary>
        Brush Color { get; set; }

        /// <summary>
        /// Gets or sets the opacity
        /// </summary>
        double Opacity { get; set; }

        /// <summary>
        /// Gets or sets the labels background color
        /// </summary>
        Brush LabelBackgroundColor { get; set; }

        /// <summary>
        /// Gets or sets the labels font
        /// </summary>
        FontFamily LabelFont { get; set; }

        /// <summary>
        /// Gets or sets the labels font style
        /// </summary>
        FontStyle LabelFontStyle { get; set; }

        /// <summary>
        /// Gets or sets the labels font weight
        /// </summary>
        FontWeight LabelFontWeight { get; set; }

        /// <summary>
        /// Gets or sets the labels foreground color
        /// </summary>
        Brush LabelForegroundColor { get; set; }

        /// <summary>
        /// Gets a value indicating whether or not the label should be underlined
        /// </summary>
        bool LabelTextUnderline { get; set; }

        /// <summary>
        /// Gets or sets the lines visibility
        /// </summary>
        Visibility Visibility { get; set; }

        /// <summary>
        /// Gets or sets the label text
        /// </summary>
        string Text { set; }

        /// <summary>
        /// Gets or sets the lines thickness
        /// </summary>
        double Thickness { get; set; }

        /// <summary>
        /// Gets or sets the first X coordinate
        /// </summary>
        double X1 { get; set; }

        /// <summary>
        /// Gets or sets the second X coordinate
        /// </summary>
        double X2 { get; set; }

        /// <summary>
        /// Gets or sets the first Y coordinate
        /// </summary>
        double Y1 { get; set; }

        /// <summary>
        /// Gets or sets the second Y coordinate
        /// </summary>
        double Y2 { get; set; }
    }
}
